#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAXN=0x3f3f3f3f;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int main() {

	int n,m;
	cin>>n>>m;
	vector<string> vecMap(n);
	vector<vector<int>> vecCnt(n,vector<int>(m,MAXN));
	int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	--x1,--y1,--x2,--y2;
	for(int i=0;i<n;++i){
		cin>>vecMap[i];
	}
	vecCnt[x1][y1]=0;
	queue<pair<int,int>> q;
	q.push({x1,y1});
	while(q.size()){
		int x=q.front().first;
		int y=q.front().second;
		q.pop();
		for(int i=0;i<4;++i){
			int nx=x+dx[i];
			int ny=y+dy[i];
			if(nx<0 || nx>=n || ny<0 || ny>=m || vecCnt[nx][ny]<=vecCnt[x][y]+1 || vecMap[nx][ny]=='*'){
				continue;
			}
			vecCnt[nx][ny]=vecCnt[x][y]+1;
			q.push({nx,ny});
		}
	}
	if(vecCnt[x2][y2]==MAXN){
		cout<<-1<<endl;
	}
	else{
		cout<<vecCnt[x2][y2]<<endl;
	}
	
	return 0;
}
